package com.young.pattern.simpleFactoryPattern;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class ChartClient {


    /**
     * 简单工厂模式:
     *  定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类
     * 简单工厂模式的优缺点:
     * 优点:
     *  1,工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品的实例;简单工厂模式实现了对象创建和使用的分离
     *  2,客户端无须知道创建的具体产品类的名称,只需要知道一个代号即可;
     *  3,通过引入配置文件,在不改变任何客户端代码的情况下,更换和增加新的具体产品类
     *缺点:
     *  1,工厂类集中了所有产品的创建逻辑,职责过重;一旦不能正常工作,整个系统都要受到影响.
     *  2,使用简单工厂模式势必会增加系统中类的个数(引入新的工厂类),增加了系统的复杂度和理解难度;
     *  3,系统扩展困难,一旦增加新的产品就得修改工厂逻辑,不利于系统的扩展和维护
     *  4,简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的登记结构
     */
    @Value("${simple.factory.pattern.chartType:pie}")
    private String chartType;

    public void testFactory(){
        Chart chart = ChartFactory.getChart(chartType);
        chart.display();
    }
}
